import 'package:easy_refresh/easy_refresh.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/foundation.dart';
import 'package:my_audio_recorder_example/Bean/AudioRecordItem.dart';
import 'package:my_audio_recorder_example/Widget/ListItem.dart';

/// 刷新Widget
class RefreshListWidget extends StatefulWidget {
  const RefreshListWidget(
      {super.key, required this.recordItemList, this.isLoadFormNet = false});

  final List<AudioRecordItem> recordItemList;

  // 是否从接口分页加载数据  面试官，目前我暂时没有做接口的处理，只是本地数据的处理，实现的是第三个Flutter题目
  final bool isLoadFormNet;

  @override
  State<RefreshListWidget> createState() => _RefreshListWidget();
}

class _RefreshListWidget extends State<RefreshListWidget> {
  // 列表最初显示数量
  int _showCount = 10;

  // 下拉刷新、上拉加载控制
  late EasyRefreshController _controller;

  // 数据源
  List<AudioRecordItem> list = [];

  // 是否从网络接口分页加载数据
  bool isLoadFormNet = false;

  // 显示的列表数据
  List<AudioRecordItem> showList = [];

  @override
  void initState() {
    super.initState();
    print('-------------Refresh initState-------------');
    isLoadFormNet = widget.isLoadFormNet;
    list = widget.recordItemList;
    _showCount = list.length > 10 ? 10 : list.length;
    // 设置显示的List数据
    showList = list.sublist(0, _showCount);
    // 初始化加载刷新Controller
    _controller = EasyRefreshController(
        controlFinishRefresh: true, controlFinishLoad: true);
  }

  @override
  void dispose() {
    super.dispose();
    // 销毁
    _controller.dispose();
  }

  @override
  Widget build(BuildContext context) {
    list = widget.recordItemList;
    // _showCount = list.length > 10 ? 10 : list.length;
    // 设置显示的List数据
    showList = list.sublist(0, _showCount);
    print("list: $list\nshowList:$showList");
    return EasyRefresh(
        controller: _controller,
        header: const ClassicHeader(
            dragText: '下拉刷新~',
            armedText: '释放开始刷新~',
            readyText: '刷新中...',
            processingText: '刷新中...',
            processedText: '刷新成功~',
            messageText: '上次刷新时间:%T'),
        footer: const ClassicFooter(
            dragText: '上拉刷新~',
            armedText: '释放开始加载~',
            readyText: '加载中...',
            processingText: '加载中...',
            processedText: '加载成功~',
            messageText: '上次加载时间:%T',
            noMoreText: '没有更多了~'),
        onRefresh: () async {
          await Future.delayed(const Duration(seconds: 2));
          if (!mounted) {
            return;
          }
          if (!isLoadFormNet) {
            // 本地已有数据的分页
            // 赋值数据源数据
            // list = widget.recordItemList;
            // _showCount = list.length > 10 ? 10 : list.length;
            // // 设置显示的List数据
            // showList = list.sublist(0, _showCount);
            // if (kDebugMode) {
            //   print('Audio Record List Data: \n$list');
            // }
            showList = [];
            setState(() {
              _showCount = list.length > 10 ? 10 : list.length;
              showList = list.sublist(0, _showCount);
            });
            _controller.finishRefresh();
            _controller.resetFooter();
          } else {
            // 接口暂不处理
          }
        },
        onLoad: () async {
          await Future.delayed(const Duration(seconds: 2));
          if (!mounted) {
            return;
          }
          if (!isLoadFormNet) {
            // 本地已有数据的分页
            setState(() {
              if (list.length >= showList.length + 5) {
                _showCount += 5;
              } else {
                _showCount += list.length - showList.length;
              }
              showList = list.sublist(0, _showCount);
            });
            _controller.finishLoad(_showCount >= list.length
                ? IndicatorResult.noMore
                : IndicatorResult.success);
          } else {
            // 接口暂不处理
          }
        },
        child: ListView.builder(
            itemBuilder: (context, index) {
              return ListItem(recordItem: showList[index]);
            },
            itemCount: showList.length));

  }
}
